#!/bin/bash
echo "===== 开始磁盘性能调优 ====="
# 检查权限，确保以root身份运行
if [ "$EUID" -ne 0 ]; then
    echo "脚本必须以root用户身份运行"
    exit 1
fi
# 记录开始时间
start_time=$(date +%s.%N)
# 磁盘设备（假设为sda）
DISK=/dev/sda
# 收集初始磁盘状态
echo "===== 初始磁盘状态 =====" > disk_tuning.log
iostat -d -k $DISK >> disk_tuning.log
iotop -n 1 -o >> disk_tuning.log
# 使用hdparm进行磁盘调优
hdparm -W 0 $DISK  # 禁用APM模式
hdparm -q 32 $DISK  # 设置队列深度
hdparm -a 16 $DISK  # 调整缓存参数
# 启用电梯算法和写时合并
echo "mq-deadline" > /sys/block/$DISK/queue/scheduler
echo 1 > /sys/block/$DISK/queue/write_cache Enabled
# 运行fio压力测试
echo "===== 开始FIO测试 =====" >> disk_tuning.log
fio --name=testReadWrite --size=1G --runtime=60s --numjobs=4 \
    --rw=read,write --bs=4k --iodepth=32 --direct=1 >> disk_tuning.log
# 收集调优后的磁盘状态
echo "===== 调优后磁盘状态 =====" >> disk_tuning.log
iostat -d -k $DISK >> disk_tuning.log
iotop -n 1 -o >> disk_tuning.log
# 计算执行时间
end_time=$(date +%s.%N)
duration=$(echo "$end_time - $start_time" | bc)
# 结构化输出性能指标
echo "===== 调优结果 ====="
echo '{
    "execution_time": "'$duration'",
    "disk_iops_before": '$IOPS_BEFORE',
    "disk_iops_after": '$IOPS_AFTER',
    "io_latent_before": '$LATENT_BEFORE',
    "io_latent_after": '$LATENT_AFTER'
}''
# 提示用户检查结果
echo "脚本执行完毕，请查看disk_tuning.log获取详细信息"
这个脚本针对磁盘性能进行了全面的调优，包括禁用APM模式、调整队列深度和电梯算法，并通过fio进行压力测试。它还包含权限检查和日志记录功能，确保调优过程可追溯。